home *** CD-ROM | disk | FTP | other *** search
/ Sky at Night 2007 June / SAN CD 6-2007 CD-ROM 25.iso / pc / Software / AstroGrav_Win / Java / jre1.6.0 / lib / rt.jar / java / util / TimeZone.class (.txt) < prev    next >
Encoding:
Java Class File  |  2006-11-29  |  6.0 KB  |  356 lines

  1. package java.util;
  2.  
  3. import java.io.Serializable;
  4. import java.lang.ref.SoftReference;
  5. import java.security.AccessController;
  6. import java.util.concurrent.ConcurrentHashMap;
  7. import sun.security.action.GetPropertyAction;
  8. import sun.util.TimeZoneNameUtility;
  9. import sun.util.calendar.ZoneInfo;
  10. import sun.util.calendar.ZoneInfoFile;
  11.  
  12. public abstract class TimeZone implements Serializable, Cloneable {
  13.    public static final int SHORT = 0;
  14.    public static final int LONG = 1;
  15.    private static final int ONE_MINUTE = 60000;
  16.    private static final int ONE_HOUR = 3600000;
  17.    private static final int ONE_DAY = 86400000;
  18.    private static Hashtable cachedLocaleData = new Hashtable(3);
  19.    static final long serialVersionUID = 3581463369166924961L;
  20.    static final TimeZone NO_TIMEZONE = null;
  21.    // $FF: renamed from: ID java.lang.String
  22.    private String field_0;
  23.    private static volatile TimeZone defaultTimeZone;
  24.    private static final InheritableThreadLocal<TimeZone> defaultZoneTL = new InheritableThreadLocal();
  25.    static final String GMT_ID = "GMT";
  26.    private static final int GMT_ID_LENGTH = 3;
  27.  
  28.    public abstract int getOffset(int var1, int var2, int var3, int var4, int var5, int var6);
  29.  
  30.    public int getOffset(long var1) {
  31.       return this.inDaylightTime(new Date(var1)) ? this.getRawOffset() + this.getDSTSavings() : this.getRawOffset();
  32.    }
  33.  
  34.    int getOffsets(long var1, int[] var3) {
  35.       int var4 = this.getRawOffset();
  36.       int var5 = 0;
  37.       if (this.inDaylightTime(new Date(var1))) {
  38.          var5 = this.getDSTSavings();
  39.       }
  40.  
  41.       if (var3 != null) {
  42.          var3[0] = var4;
  43.          var3[1] = var5;
  44.       }
  45.  
  46.       return var4 + var5;
  47.    }
  48.  
  49.    public abstract void setRawOffset(int var1);
  50.  
  51.    public abstract int getRawOffset();
  52.  
  53.    public String getID() {
  54.       return this.field_0;
  55.    }
  56.  
  57.    public void setID(String var1) {
  58.       if (var1 == null) {
  59.          throw new NullPointerException();
  60.       } else {
  61.          this.field_0 = var1;
  62.       }
  63.    }
  64.  
  65.    public final String getDisplayName() {
  66.       return this.getDisplayName(false, 1, Locale.getDefault());
  67.    }
  68.  
  69.    public final String getDisplayName(Locale var1) {
  70.       return this.getDisplayName(false, 1, var1);
  71.    }
  72.  
  73.    public final String getDisplayName(boolean var1, int var2) {
  74.       return this.getDisplayName(var1, var2, Locale.getDefault());
  75.    }
  76.  
  77.    public String getDisplayName(boolean var1, int var2, Locale var3) {
  78.       if (var2 != 0 && var2 != 1) {
  79.          throw new IllegalArgumentException("Illegal style: " + var2);
  80.       } else {
  81.          String var4 = this.getID();
  82.          String[] var5 = getDisplayNames(var4, var3);
  83.          if (var5 != null) {
  84.             int var8 = var1 ? 3 : 1;
  85.             if (var2 == 0) {
  86.                ++var8;
  87.             }
  88.  
  89.             return var5[var8];
  90.          } else {
  91.             if (var4.startsWith("GMT")) {
  92.                char var6 = var4.charAt(3);
  93.                if (var6 == '+' || var6 == '-') {
  94.                   return var4;
  95.                }
  96.             }
  97.  
  98.             int var7 = this.getRawOffset();
  99.             if (var1) {
  100.                var7 += this.getDSTSavings();
  101.             }
  102.  
  103.             return ZoneInfoFile.toCustomID(var7);
  104.          }
  105.       }
  106.    }
  107.  
  108.    private static final String[] getDisplayNames(String var0, Locale var1) {
  109.       Map var2 = java.util.TimeZone.DisplayNames.access$000();
  110.       SoftReference var3 = (SoftReference)var2.get(var0);
  111.       if (var3 != null) {
  112.          Map var4 = (Map)var3.get();
  113.          if (var4 != null) {
  114.             String[] var8 = (String[])var4.get(var1);
  115.             if (var8 != null) {
  116.                return var8;
  117.             }
  118.  
  119.             var8 = TimeZoneNameUtility.retrieveDisplayNames(var0, var1);
  120.             if (var8 != null) {
  121.                var4.put(var1, var8);
  122.             }
  123.  
  124.             return var8;
  125.          }
  126.       }
  127.  
  128.       String[] var7 = TimeZoneNameUtility.retrieveDisplayNames(var0, var1);
  129.       if (var7 != null) {
  130.          ConcurrentHashMap var5 = new ConcurrentHashMap();
  131.          var5.put(var1, var7);
  132.          var3 = new SoftReference(var5);
  133.          var2.put(var0, var3);
  134.       }
  135.  
  136.       return var7;
  137.    }
  138.  
  139.    public int getDSTSavings() {
  140.       return this.useDaylightTime() ? 3600000 : 0;
  141.    }
  142.  
  143.    public abstract boolean useDaylightTime();
  144.  
  145.    public abstract boolean inDaylightTime(Date var1);
  146.  
  147.    public static synchronized TimeZone getTimeZone(String var0) {
  148.       return getTimeZone(var0, true);
  149.    }
  150.  
  151.    private static TimeZone getTimeZone(String var0, boolean var1) {
  152.       Object var2 = ZoneInfo.getTimeZone(var0);
  153.       if (var2 == null) {
  154.          var2 = parseCustomTimeZone(var0);
  155.          if (var2 == null && var1) {
  156.             var2 = new ZoneInfo("GMT", 0);
  157.          }
  158.       }
  159.  
  160.       return (TimeZone)var2;
  161.    }
  162.  
  163.    public static synchronized String[] getAvailableIDs(int var0) {
  164.       return ZoneInfo.getAvailableIDs(var0);
  165.    }
  166.  
  167.    public static synchronized String[] getAvailableIDs() {
  168.       return ZoneInfo.getAvailableIDs();
  169.    }
  170.  
  171.    private static native String getSystemTimeZoneID(String var0, String var1);
  172.  
  173.    private static native String getSystemGMTOffsetID();
  174.  
  175.    public static TimeZone getDefault() {
  176.       return (TimeZone)getDefaultRef().clone();
  177.    }
  178.  
  179.    static TimeZone getDefaultRef() {
  180.       TimeZone var0 = (TimeZone)defaultZoneTL.get();
  181.       if (var0 == null) {
  182.          var0 = defaultTimeZone;
  183.          if (var0 == null) {
  184.             var0 = setDefaultZone();
  185.  
  186.             assert var0 != null;
  187.          }
  188.       }
  189.  
  190.       return var0;
  191.    }
  192.  
  193.    private static synchronized TimeZone setDefaultZone() {
  194.       TimeZone var0 = null;
  195.       String var1 = (String)AccessController.doPrivileged(new GetPropertyAction("user.timezone"));
  196.       if (var1 == null || var1.equals("")) {
  197.          String var2 = (String)AccessController.doPrivileged(new GetPropertyAction("user.country"));
  198.          String var3 = (String)AccessController.doPrivileged(new GetPropertyAction("java.home"));
  199.  
  200.          try {
  201.             var1 = getSystemTimeZoneID(var3, var2);
  202.             if (var1 == null) {
  203.                var1 = "GMT";
  204.             }
  205.          } catch (NullPointerException var5) {
  206.             var1 = "GMT";
  207.          }
  208.       }
  209.  
  210.       var0 = getTimeZone(var1, false);
  211.       if (var0 == null) {
  212.          String var7 = getSystemGMTOffsetID();
  213.          if (var7 != null) {
  214.             var1 = var7;
  215.          }
  216.  
  217.          var0 = getTimeZone(var1, true);
  218.       }
  219.  
  220.       assert var0 != null;
  221.  
  222.       AccessController.doPrivileged(new 1(var1));
  223.       if (hasPermission()) {
  224.          defaultTimeZone = var0;
  225.       } else {
  226.          defaultZoneTL.set(var0);
  227.       }
  228.  
  229.       return var0;
  230.    }
  231.  
  232.    private static boolean hasPermission() {
  233.       boolean var0 = true;
  234.       SecurityManager var1 = System.getSecurityManager();
  235.       if (var1 != null) {
  236.          try {
  237.             var1.checkPermission(new PropertyPermission("user.timezone", "write"));
  238.          } catch (SecurityException var3) {
  239.             var0 = false;
  240.          }
  241.       }
  242.  
  243.       return var0;
  244.    }
  245.  
  246.    public static void setDefault(TimeZone var0) {
  247.       if (hasPermission()) {
  248.          synchronized(TimeZone.class) {
  249.             defaultTimeZone = var0;
  250.          }
  251.       } else {
  252.          defaultZoneTL.set(var0);
  253.       }
  254.  
  255.    }
  256.  
  257.    public boolean hasSameRules(TimeZone var1) {
  258.       return var1 != null && this.getRawOffset() == var1.getRawOffset() && this.useDaylightTime() == var1.useDaylightTime();
  259.    }
  260.  
  261.    public Object clone() {
  262.       try {
  263.          TimeZone var1 = (TimeZone)super.clone();
  264.          var1.field_0 = this.field_0;
  265.          return var1;
  266.       } catch (CloneNotSupportedException var2) {
  267.          throw new InternalError();
  268.       }
  269.    }
  270.  
  271.    private static final TimeZone parseCustomTimeZone(String var0) {
  272.       int var1;
  273.       if ((var1 = var0.length()) >= 5 && var0.indexOf("GMT") == 0) {
  274.          ZoneInfo var2 = ZoneInfoFile.getZoneInfo(var0);
  275.          if (var2 != null) {
  276.             return var2;
  277.          } else {
  278.             int var3 = 3;
  279.             boolean var4 = false;
  280.             char var5 = var0.charAt(var3++);
  281.             if (var5 == '-') {
  282.                var4 = true;
  283.             } else if (var5 != '+') {
  284.                return null;
  285.             }
  286.  
  287.             int var6 = 0;
  288.             int var7 = 0;
  289.             int var8 = 0;
  290.             int var9 = 0;
  291.  
  292.             while(var3 < var1) {
  293.                var5 = var0.charAt(var3++);
  294.                if (var5 != ':') {
  295.                   if (var5 < '0' || var5 > '9') {
  296.                      return null;
  297.                   }
  298.  
  299.                   var7 = var7 * 10 + (var5 - 48);
  300.                   ++var9;
  301.                } else {
  302.                   if (var8 > 0) {
  303.                      return null;
  304.                   }
  305.  
  306.                   if (var9 > 2) {
  307.                      return null;
  308.                   }
  309.  
  310.                   var6 = var7;
  311.                   ++var8;
  312.                   var7 = 0;
  313.                   var9 = 0;
  314.                }
  315.             }
  316.  
  317.             if (var3 != var1) {
  318.                return null;
  319.             } else {
  320.                if (var8 == 0) {
  321.                   if (var9 <= 2) {
  322.                      var6 = var7;
  323.                      var7 = 0;
  324.                   } else {
  325.                      var6 = var7 / 100;
  326.                      var7 %= 100;
  327.                   }
  328.                } else if (var9 != 2) {
  329.                   return null;
  330.                }
  331.  
  332.                if (var6 <= 23 && var7 <= 59) {
  333.                   int var10 = (var6 * 60 + var7) * 60 * 1000;
  334.                   if (var10 == 0) {
  335.                      var2 = ZoneInfoFile.getZoneInfo("GMT");
  336.                      if (var4) {
  337.                         var2.setID("GMT-00:00");
  338.                      } else {
  339.                         var2.setID("GMT+00:00");
  340.                      }
  341.                   } else {
  342.                      var2 = ZoneInfoFile.getCustomTimeZone(var0, var4 ? -var10 : var10);
  343.                   }
  344.  
  345.                   return var2;
  346.                } else {
  347.                   return null;
  348.                }
  349.             }
  350.          }
  351.       } else {
  352.          return null;
  353.       }
  354.    }
  355. }
  356.